#!/usr/bin
# -*- coding: utf-8 -*-

import mod_parameters as params
import mod_element as el
import mod_node as nd
import mod_section as sec
import mod_material as mat

TCI = params.PARAMS["testConstructorsInputs"]



# ==============================================================================
class Domain():
    def __init__(self, uId, els, limits=None):
        if TCI:
            self.testInputs(uId, els, limits)
        self.uId = uId
        self.els = els
        if limits:
            self.buildEdges(limits)
        else:
            self.edges = None


    def testInputs(self, uId, els, limits):
        if not isinstance(uId, str):
            raise ValueError
        if not isinstance(els, list):
            raise ValueError
        for el in els:
            if not isinstance(el, el.Element):
                raise ValueError

    def buildEdges(self, domNds, domNdsCIds):
        for iNd in xrange(len(self.cornerNdsCIds) - 1):
            nd1CId = self.cornerNdsCIds[iNd]
            nd2CId = self.cornerNdsCIds[iNd + 1]
            self.edgs.append(Edge(nd1CId, nd2CId))
        nd1CId = self.cornerNdsCIds[-1]
        nd2CId = self.cornerNdsCIds[0]
        self.edgs.append(Edge(nd1CId, nd2CId))

        for edg in self.edgs:
            edg.build(domNds, domNdsCIds)

    def buildBoundaries(self):
        """
        ALGORITHME UNIQUEMENT VALABLE SI LES EDGES SONT DÉFINIES EXPLICITEMENT
        ENTRE DOMAINES ADJASCENTS
        
        pour chaque domain dom1
            pour chaque domain dom2
                pour chaque edge edg1 de dom1
                    pour chaque edge edg2 de dom2
                        pour chaque extrémité ext1 de edg1
                            pour chaque extrémité ext2 de edg2
                                tester la coïncidence
                                si 1 coïncidence
                                    l'une des edges vient toucher l'autre par
                                    l'une de ses extrémités
                                si 2 coïncidences
                                    les edges coïncident exactement
                                sinon
                                    pas de lien
        """
        pass

    def __str__(self, indent=0):
        ind = " " * indent
        a = ind + "Domain:\n"
        a += ind + "- cid: " + str(self.cId) + "\n"
        a += ind + "- elements cids: " + str(self.elsCIds) + "\n"
        a += ind + "- corner nodes cids: " + str(self.cornerNdsCIds)
        return a


class MasterDomain():
    def __init__(self):
        pass
